home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / system-config-printer / gtk_treeviewtooltips.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-10-12  |  6.9 KB  |  178 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import pygtk
  5. import gtk
  6. import gobject
  7.  
  8. class TreeViewTooltips(gobject.GObject):
  9.     __gproperties__ = {
  10.         'show-delay': (gobject.TYPE_UINT, 'Show Delay (ms)', 'Show Delay (ms), 0 for no delay.', 0, 10000, 500, gobject.PARAM_READWRITE),
  11.         'hide-delay': (gobject.TYPE_UINT, 'Hide Delay (ms)', 'Hide Delay (ms), 0 for unlimited.', 0, 99999999, 5000, gobject.PARAM_READWRITE) }
  12.     
  13.     def __init__(self, treeview, tooltip_func, *tooltip_func_args):
  14.         self.__gobject_init__()
  15.         self.treeview = treeview
  16.         self.tooltip_func = tooltip_func
  17.         self.tooltip_func_args = tooltip_func_args
  18.         self.popup = gtk.Window(gtk.WINDOW_POPUP)
  19.         self.label = gtk.Label()
  20.         self.label.set_line_wrap(True)
  21.         self.label.set_use_markup(True)
  22.         self.popup.add(self.label)
  23.         self.popup.set_name('gtk-tooltips')
  24.         self.popup.set_resizable(False)
  25.         self.popup.set_border_width(4)
  26.         self.popup.set_app_paintable(True)
  27.         self.show_delay = 500
  28.         self.hide_delay = 5000
  29.         self.show_timer = None
  30.         self.hide_timer = None
  31.         self.path = None
  32.         self.col = None
  33.         treeview.connect('motion-notify-event', self.on_motion_notify)
  34.         treeview.connect('leave-notify-event', self.on_leave_notify)
  35.         self.popup.connect('expose-event', self.on_expose_event)
  36.  
  37.     
  38.     def do_get_property(self, property):
  39.         if property.name == 'show-delay':
  40.             return self.show_delay
  41.         if property.name == 'hide-delay':
  42.             return self.hide_delay
  43.  
  44.     
  45.     def do_set_property(self, property, value):
  46.         if property.name == 'show-delay':
  47.             self.show_delay = value
  48.         elif property.name == 'hide-delay':
  49.             self.hide_delay = value
  50.         
  51.  
  52.     
  53.     def on_motion_notify(self, treeview, event):
  54.         if event.window != treeview.get_bin_window():
  55.             return None
  56.         path = treeview.get_path_at_pos(int(event.x), int(event.y))
  57.         if path:
  58.             (path, col, _x, _y) = path
  59.             if self.path != path or self.col != col:
  60.                 if self.hide_timer:
  61.                     gobject.source_remove(self.hide_timer)
  62.                     self.hide_timer = None
  63.                 
  64.                 self.hide_tip()
  65.                 self.path = path
  66.                 self.col = col
  67.                 if self.show_timer:
  68.                     gobject.source_remove(self.show_timer)
  69.                     self.show_timer = None
  70.                 
  71.                 self.show_timer = gobject.timeout_add(self.show_delay, self.show_tip, path, col, event.x, event.y)
  72.             elif self.hide_timer:
  73.                 gobject.source_remove(self.hide_timer)
  74.                 if self.hide_delay > 0:
  75.                     self.hide_timer = gobject.timeout_add(self.hide_delay, self.hide_tip)
  76.                 
  77.             
  78.         elif self.path or self.col:
  79.             if self.show_timer:
  80.                 gobject.source_remove(self.show_timer)
  81.                 self.show_timer = None
  82.             
  83.             if self.hide_timer:
  84.                 gobject.source_remove(self.hide_timer)
  85.                 self.hide_timer = None
  86.             
  87.             self.hide_tip()
  88.         
  89.  
  90.     
  91.     def on_leave_notify(self, treeview, event):
  92.         if self.show_timer:
  93.             gobject.source_remove(self.show_timer)
  94.             self.show_timer = None
  95.         
  96.         if self.hide_timer:
  97.             gobject.source_remove(self.hide_timer)
  98.             self.hide_timer = None
  99.         
  100.         if self.path or self.col:
  101.             self.hide_tip()
  102.         
  103.  
  104.     
  105.     def show_tip(self, path, col, event_x, event_y):
  106.         text = self.tooltip_func(self.treeview.get_model(), path, col, *self.tooltip_func_args)
  107.         if not text or len(text) == 0:
  108.             return False
  109.         self.label.set_label(text)
  110.         (parent_x, parent_y) = self.treeview.get_bin_window().get_origin()
  111.         (width, height) = self.popup.size_request()
  112.         screen_width = gtk.gdk.screen_width()
  113.         screen_height = gtk.gdk.screen_height()
  114.         x = int(event_x + parent_x)
  115.         y = int(event_y + parent_y + 10)
  116.         if x + width > screen_width:
  117.             x = screen_width - width
  118.         
  119.         if y + height > screen_height:
  120.             y = int(event_y + parent_y - height - 10)
  121.         
  122.         self.popup.move(x, y)
  123.         self.popup.show_all()
  124.         if self.hide_delay > 0:
  125.             self.hide_timer = gobject.timeout_add(self.hide_delay, self.hide_tip)
  126.         
  127.         return False
  128.  
  129.     
  130.     def on_expose_event(self, window, event):
  131.         (width, height) = window.size_request()
  132.         window.style.paint_flat_box(window.window, gtk.STATE_NORMAL, gtk.SHADOW_OUT, None, window, 'tooltip', 0, 0, width, height)
  133.  
  134.     
  135.     def hide_tip(self):
  136.         self.path = None
  137.         self.col = None
  138.         self.popup.hide()
  139.         return False
  140.  
  141.  
  142. if __name__ == '__main__':
  143.     
  144.     def getTooltip(model, path, col, cell):
  145.         iter = model.get_iter(path)
  146.         text = '%s' % model.get_value(iter, cell)
  147.         return text
  148.  
  149.     window = gtk.Window(gtk.WINDOW_TOPLEVEL)
  150.     window.connect('delete_event', gtk.main_quit)
  151.     window.set_default_size(200, 250)
  152.     scrolledwin = gtk.ScrolledWindow()
  153.     scrolledwin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
  154.     window.add(scrolledwin)
  155.     treeview = gtk.TreeView()
  156.     treeview.get_selection().set_mode(gtk.SELECTION_NONE)
  157.     store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING)
  158.     treeview.set_model(store)
  159.     scrolledwin.add(treeview)
  160.     column = gtk.TreeViewColumn('Head1', gtk.CellRendererText(), text = 0)
  161.     treeview.append_column(column)
  162.     column = gtk.TreeViewColumn('Head2', gtk.CellRendererText(), text = 1)
  163.     treeview.append_column(column)
  164.     for i in xrange(10):
  165.         cell1 = 'cell data %d.1' % i
  166.         cell2 = 'cell data %d.2' % i
  167.         cell3 = 'Tooltip %d' % i
  168.         cell3 += '\nThis program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.'
  169.         store.append([
  170.             cell1,
  171.             cell2,
  172.             cell3])
  173.     
  174.     tips = TreeViewTooltips(treeview, getTooltip, 2)
  175.     window.show_all()
  176.     gtk.main()
  177.  
  178.